package mylab.io.base.sync;

import java.util.Map;
import java.util.concurrent.TimeUnit;

import mylab.io.base.model.Msg;

/**
 * msg同步配对器
 */
public interface Synchro {

    /**
     * 配对表注册
     */
    void regist(Map<String, String> pairs);

    /**
     * 缓存请求消息
     */
    void cacheRequest(Msg request);

    /**
     * 清理请求消息
     */
    void cleanCache(Msg request);

    /**
     * 清理所有缓存
     */
    void clear();

    /**
     * 尝试匹配（是否配对的回应）
     */
    boolean tryMatch(Msg response);

    /**
     * 阻塞式获取应答消息，超时抛出异常
     */
    Msg getResponse(Msg request, long timeout, TimeUnit unit) throws Exception;
}
